#ifndef __LDX_PUBLICSHADERDIFNES_H_INCLUDE__
#define __LDX_PUBLICSHADERDIFNES_H_INCLUDE__
#include "LDXConfig.h"

namespace ldx
{
	namespace render
	{
		enum E_SHADER_TYPE
		{
			EST_UNDEFINEDSHADER= 0x1,
			EST_VERTEXSHADER = 2,//vertex shader
			EST_GEOMETRYSHADER = 4,//gemetry shader
			EST_PIXELSHADER = 8,//pixel shader of framenet shader
			EST_TCS = 16,//tess control shader
			EST_TESS = 32,//tess calculate shader
			EST_CALCULATE//calculate shader
		};
		//for CShaderCache,IProgram
		struct SShaderMid
		{
			E_SHADER_TYPE Type = EST_UNDEFINEDSHADER;
			ID3D11InputLayout* InputLayout;
			union
			{
				unsigned long long Force64Bits ;
				ID3D11VertexShader* VertexShader = nullptr;
				ID3D11PixelShader* PixelShader;
				ID3D11GeometryShader* GeometryShader;
				//tesc
				//tess
				//calculate

			};

		};



		//default shaders

		extern const char* SZShaderModeVS4_0_0;
		extern const char* SZShaderModePS4_0_0;
		//gs....

		inline const char* GetShaderModelBasedType(E_SHADER_TYPE type)
		{
			switch (type)
			{
			case ldx::render::EST_UNDEFINEDSHADER:
				return nullptr;
				break;
			case ldx::render::EST_VERTEXSHADER:
				return SZShaderModeVS4_0_0;
				break;
			case ldx::render::EST_GEOMETRYSHADER:
				//return SZShaderModeGS4_0_0;
				break;
			case ldx::render::EST_PIXELSHADER:
				return SZShaderModePS4_0_0;
				break;
			case ldx::render::EST_TCS:
				break;
			case ldx::render::EST_TESS:
				break;
			case ldx::render::EST_CALCULATE:
				break;
			default:
				break;
			}
			return nullptr;
		}

	}
}
#endif//! __LDX_PUBLICSHADERDIFNES_H_INCLUDE__